package com.thghh.ch6.graph;

/**
 * @author Zhikang.Peng
 * @version 1.0
 * @email thghh@qq.com
 * @date 2020/11/13 15:52
 */
public interface IBasicGraph<T> {
    /**
     * 将给定的顶点插入图
     *
     * @param label
     */
    IGraph addVertex(T label);

    /**
     * 在begin和end两个顶点加入一条边，边的权值为weight
     *
     * @param begin
     * @param end
     * @param weight
     * @return 建立成功返回true
     */
    boolean addEdge(T begin, T end, double weight);

    /**
     * 在begin和end两个顶点加入一条边
     *
     * @param begin
     * @param end
     */
    void addEdge(T begin, T end);

    /**
     * 检查begin和end顶点之间是否存在边
     *
     * @param begin
     * @param end
     * @return 如果存在边返回true，否则false
     */
    boolean hasEdge(T begin, T end);


    /**
     * 图是否为空
     *
     * @return 如果为空返回true，否则false
     */
    boolean isEmpty();

    /**
     * 返回图中顶点的个数
     *
     * @return
     */
    int getNumberOfVertices();

    /**
     * 返回图中边的个数
     *
     * @return
     */
    int getNumberOfEdge();

    /**
     * 删除图中所有的顶点和边
     */
    void clear();

}
